import * as TYPES from '../action-types';
import { login } from "@/api/account";
import {getUserRole} from '@/api/permission'
import { setToken,setSession,removeSession,removeToken } from "@/utils/sesstion";
import {message} from 'antd'
import {push} from 'react-router-redux'        // redux里面要进行路由跳转 react-router-redux 还有其他方案吗  ？ 
import store from '../index'
import router from '@/router/index'

let actions = {
    // redux-promise
    // 登录 
    toLogin:async (requestData)=>{
        return {
            type:TYPES.Login,
            payload:await login(requestData).then(res=>{
                const { resCode, data } = res;
                try {
                    if (resCode === 0) {
                      setToken(data.token);
                      setSession('Username',data.username)
                      setSession('role',data.role) 
                      // 登录成功后跳转到首页
                    store.dispatch(push('/index')) //   this.props.history.push("/index");
                    }
                    message.success(res.message);
                  } catch (error) {
                    this.setState({ loading: false });
                    message.warn("登录失败");
                  }
                return data
            })
        }
    },
    // redux-thunk
    // 注销 
    toLogout(){
      // 清除缓存
        removeSession('Username')
        removeToken()
        return (dispatch)=>{
            dispatch(push('/'))
            dispatch({type:TYPES.Logout})
        }
    },
    // 掉接口获取-当前用户的角色权限
    getUserRoles:async ()=>{
      return {
        type:TYPES.RouteAry,
        payload: await getUserRole().then(res=>{
          return actions.handleRoutes(res.data.role)
        })
      }
    },


    // 过滤路由 
    handleRoute:()=>{
        return (dispatch,getState)=>{
        //  const {userRoute , userData} =  getState().user 
        //可以从userData中取--但是这样不好 角色和用户登录数据没分开---刷新后数据容易丢失 解决办法：本地存储--掉接口
        // 从本地取出（存在本地的）当前用户的角色权限有哪些 
              let userRole =  JSON.parse(sessionStorage.getItem('role')) 
              userRole =userRole && userRole.split(",");
              //   // 存储路由 
              let routers =[] 
              // // 如果userRole包含admin--超级管理员 就全部展示 
              if(userRole.includes('admin')){
                routers=router
              }else{
                // 其它的 过滤
                routers =  router.filter(item=>{
                    if(actions.hasPermission(item,userRole)){
                    // 如果有子级的话
                    if(item.child && item.child.length>0){
                    item.child = item.child.filter(child=>{
                        if(actions.hasPermission(child,userRole)){
                          return child
                        }
                      })
                    }
                      return item
                  }
                  })
              }
              dispatch({type:TYPES.RouteAry,payload:routers})
        }
    },
    // 通过接口方式-过滤路由 
    handleRoutes:(params)=>{
      const userRole =params && params.split(",");
      //   // 存储路由 
      let routers =[] 
      // // 如果userRole包含admin--超级管理员 就全部展示 
      if(userRole.includes('admin')){
        routers=router
      }else{
        // 其它的 过滤
        routers =  router.filter(item=>{
            if(actions.hasPermission(item,userRole)){
            // 如果有子级的话
            if(item.child && item.child.length>0){
            item.child = item.child.filter(child=>{
                if(actions.hasPermission(child,userRole)){
                  return child
                }
              })
            }
              return item
          }
          })
      }
      return routers
    },
    
    
    // 方法 
    // 过滤函数 -- 便于子级递归过滤 
    hasPermission:(item,router)=>{
      if(item.role && item.role.length>0){
        return router.some(elem=>item.role.indexOf(elem)>=0);
      }
          }

    
};
export default actions;